// 一个功能齐全的body解析器中间件。支持multipart、urlencoded和json请求体。
const { koaBody } = require("koa-body");
const compress = require("koa-compress"); // 引入gzip压缩中间件
const cacheControl = require("koa-cache-control"); // 引入缓存控制中间件
const helmet = require("koa-helmet"); // 引入xss过滤中间件
const cookie = require("koa-cookie").default; // 引入客户端cookie解析中间件
const session = require("../utils/session-redis");
const cors = require("@koa/cors");
module.exports = (app) => {
  const { config } = app;

  const { appConfig } = config;
  if (appConfig.proxy) {
    app.proxy = appConfig.proxy;
    app.keys = Array.isArray(appConfig.keys)
      ? appConfig.keys
      : [appConfig.keys];
  }

  // XSS过滤
  app.use(
    helmet.xssFilter(
      Object.assign(
        {
          setOnOldIE: true,
        },
        config.xss
      )
    )
  );

  // gzip压缩
  app.use(
    compress(
      Object.assign(
        {
          threshold: 1024,
          flush: require("zlib").Z_SYNC_FLUSH,
        },
        config.compress
      )
    )
  );

  // 缓存控制
  app.use(
    cacheControl(
      Object.assign(
        {},
        config.cache
          ? config.cache
          : {
              public: "public",
            }
      )
    )
  );

  // session配置
  if (config.session) {
    app.use(session(config.session, app));
  }
  if (config.cors) {
    app.use(cors(config.cors));
  }
  app.use(cookie());
  app.use(
    koaBody({
      multipart: true,
      parsedMethods: ["GET", "POST", "DELETE", "PUT"], // ['POST', 'PUT', 'PATCH', 'GET', 'HEAD', 'DELETE']
    })
  );
};
